package com.tanhua.server.controller;

import com.tanhua.autoconfig.template.SmsTemplate;
import com.tanhua.server.serivce.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;
import java.util.concurrent.TimeUnit;

@RestController
@RequestMapping("/user")
public class LoginController {

    @Autowired
    private SmsTemplate smsTemplate;

    @Autowired
    private UserService userService;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    /**
     * 登录第一步：发送手机验证码
     *   请求连接： POST   /user/login
     *   请求参数：
     *       Body类型参数：json字符串
     *       {
     *           "phone": "13800138000"
     *       }
     *       @RequestBody : 对象 （java实体类 User （属性），Map集合（key））
     *   相应数据：
     *      void
     *   返回值：
     *     ResponseEntity ： 让程序员自定义状态码
     *              200 + 数据
     *              401 + 数据
     *              500 + 数据
     *
     */
    @PostMapping("/login")
    public ResponseEntity login(@RequestBody Map map) {
        //1、从map中获取手机号码
        String phone = (String) map.get("phone");
        //2、生成一个6位数字短信验证码
        //String code = RandomUtil.randomNumbers(6);//工具类，生成数字验证码
        String code = "123456";
        //3、调用SmsTemplate对象，发送验证码
        //smsTemplate.sendSms(phone,code);
        //4、将验证码存入到Redis中
        redisTemplate.opsForValue().set("CODE_"+phone,code,5, TimeUnit.MINUTES);
        //5、设置返回值
        return ResponseEntity.ok(null); //状态码200
        //return ResponseEntity.status(500).body("对不起，我错了");
    }

    /**
     * 登录第二步：使用验证码验证登录
     *    请求连接： POST   /loginVerification
     *    请求参数：Body
     *      phone：手机号码，verificationCode：用户输入的验证码
     *    响应数据：
     *      token：jwttoken字符串
     *      isNew：boolean（true：新用户，false：老用户）
     */
    @PostMapping("/loginVerification")
    public ResponseEntity loginVerification(@RequestBody Map map) {
        //1、获取请求的手机号和验证码
        String phone = (String) map.get("phone");
        String verifiCode = (String) map.get("verificationCode");
        //2、调用service完成登录的验证
        Map retMap = userService.loginVerification(phone,verifiCode);  //返回值
        //3、构造返回值
        return ResponseEntity.ok(retMap);
    }
}
